
-- 获取所有优惠券ID
local voucherIds = redis.call('keys', 'voucher:quantity:*')

local expiredVouchersKey = 'voucher:expired'

for _, voucherId in ipairs(voucherIds) do
    -- 提取优惠券ID
    local id = voucherId:match('voucher:quantity:(%d+)')
    if id then
        -- 构建状态和失效时间的键名
        local statusKey = 'voucher:status:' .. id
        local expirationTimeKey = 'voucher:expiration_time:' .. id

        -- 分别获取优惠券状态和失效时间
        local status = tonumber(redis.call('GET', statusKey))
        -- 获取优惠券失效时间戳
        local expirationTime = tonumber(redis.call('GET', expirationTimeKey))
        -- 获取当前时间戳
        local time = redis.call('TIME')
        local seconds = tonumber(time[1])

        -- 判断优惠券是否过期
        if status == 2 then
            -- 优惠券已过期，跳过
        else
            if seconds > expirationTime then
                -- 更新优惠券状态为过期（2）
                redis.call('set', statusKey, 2)
                -- 将过期的优惠券ID添加到过期优惠券集合中
                redis.call('sadd', expiredVouchersKey, id)
            end
        end
    end
end

return 1  -- 扫描完成
